<?php
namespace App\Modules\Order\Jobs;

use App\Modules\Free\Models\FreeRecord;
use App\Modules\Free\Models\UnlockGood;
use App\Modules\Free\Models\UnlockRecord;
use App\Modules\Order\Models\Order;
//use App\Modules\User\UnlockRank;
use Illuminate\Bus\Queueable;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Queue\SerializesModels;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Log;

class UnlockJob implements ShouldQueue
{
    use Queueable,SerializesModels;

    public $order;

    public function __construct(Order $order)
    {
        $this->order = $order;
    }

    public function handle()
    {
//        DB::beginTransaction();
//        if ($this->order->type == Order::TYPE_PACKAGE) {
//            $unlock =  UnlockGood::query()
//                ->where('unlock_good_type', $this->order->type)
//                ->where('unlock_good_id', $this->order->link_id)
//                ->get();
//            if (is_null($unlock)) {
//                return ;
//            }
//            $free = FreeRecord::query()
//                ->where('user_id', $this->order->referrer_id)
//                ->whereRaw('aim > unlocked')
//                ->get();
//            if (is_null($free)) {
//                return;
//            }
//            $aim = null;
//            $key = null;
//            foreach ($free as $item) {
//                foreach ($unlock as $item2) {
//                    if ($item->good_type == $item2->free_good_type && $item->good_id == $item2->free_good_id) {
//                        $aim = $item;
//                        $key = $item2;
//                        break 2;
//                    }
//                }
//            }
//            if (!is_null($aim)) {
//                $money = min($key->money, $aim->aim - $aim->unlocked);
//                $aim->increment('unlocked', $money);
//                UnlockRecord::query()
//                    ->create([
//                        'user_id' => $this->order->referrer_id,
//                        'buyer_id' => $this->order->user_id,
//                        'free_record_id' => $aim->id,
//                        'unlock_good_type' => Order::TYPE_PACKAGE,
//                        'unlock_good_id' => $this->order->link_id,
//                        'title' => $this->order->title,
//                        'order_id' => $this->order->id,
//                        'money' => $money,
//                        'status' => UnlockRecord::STATUS_INIT
//                    ]);
//                UnlockRank::increase($aim->user_id, $money);
//            }
//
//        } elseif ($this->order->type == Order::TYPE_GOOD) {
//            foreach ($this->order->detail as $value) {
//                $unlock =  UnlockGood::query()
//                    ->where('unlock_good_type', $this->order->type)
//                    ->where('unlock_good_id', $value['good_id'])
//                    ->get();
//                if (is_null($unlock)) {
//                    return ;
//                }
//                $free = FreeRecord::query()
//                    ->where('user_id', $this->order->referrer_id)
//                    ->whereRaw('aim > unlocked')
//                    ->get();
//                if (is_null($free)) {
//                    return;
//                }
//
//                $aim = null;
//                $key = null;
//                foreach ($free as $item) {
//                    foreach ($unlock as $item2) {
//                        if ($item->good_type == $item2->free_good_type && $item->good_id == $item2->free_good_id) {
//                            $aim = $item;
//                            $key = $item2;
//                            break 2;
//                        }
//                    }
//                }
//                if (!is_null($aim)) {
//                    $money = min($key->money, $aim->aim - $aim->unlocked) * $value['number'];
//                    $aim->increment('unlocked', $money);
//                    UnlockRecord::query()
//                        ->create([
//                            'user_id' => $this->order->referrer_id,
//                            'buyer_id' => $this->order->user_id,
//                            'free_record_id' => $aim->id,
//                            'unlock_good_type' => Order::TYPE_GOOD,
//                            'unlock_good_id' => $item['good_id'],
//                            'title' => $value['good_name'],
//                            'order_id' => $this->order->id,
//                            'money' => $money,
//                            'status' => UnlockRecord::STATUS_INIT
//                        ]);
//                    UnlockRank::increase($aim->user_id, $money);
//                }
//            }
//        }
//        DB::commit();
    }
}
